package com.lantu.core.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.lantu.core.entity.User;
import com.lantu.dto.user.UserDTO;
import com.lantu.dto.user.UserLoginDTO;
import com.lantu.pojo.user.LoginUser;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author binyuhuang
 * @since 2023-02-07
 */
public interface IUserService extends IService<User> {

    /**
     * 登录
     * @param dto 登录DTO
     * */
    LoginUser login(HttpServletRequest request, UserLoginDTO dto) throws Exception;


    /**
     * 根据token查找用户信息
     * */
    Map<String, Object> getUserInfo(String token);


    /**
     * 退出登录
     * */
    void logout(String token);

    /**
     * 批量推出登录
     * */
    void logouts(Set<String> tokens);

    /**
     * 根据用户名查找用户
     * @param username 用户名
     * */
    User getUserByUsername(String username);

    /**
     * 检测是否存在用户名
     * @param username 用户名
     * */
    boolean checkUserName(String username);

    /**
     * 检测是否存在邮箱
     * */
    boolean checkEmail(String email);

    /**
     * 根据用户Id--获取所有token
     * @param userId 用户Id
     * */
    Set<String> getTokensByUserId(String userId);



    /**
     * 根据用户Id--获取所有LoginUser
     * @param userId 用户Id
     * */
    List<LoginUser> getLoginUserByUserId(String userId);



    /**
     * 获取所有当前登录用户
     * */
    List<LoginUser> getALLOnLineUser();


    /**
     * 保存用户
     * @param loginUser 当前登录用户
     * @param dto 修改的数据
     * */
    boolean saveUser(User loginUser, UserDTO dto) throws Exception;
}
